import Request from './request'
import Vue from 'vue'
import vue from '@/main.js'
import store from '@/store/index.js'
import {
	apiAddr
} from '@/utils/config.js'
const http = new Request()

http.setConfig((config) => {
	/* 设置全局配置 */
	config.baseUrl = apiAddr + '/api' /* 根域名不同 */
	config.header = {
		...config.header,
		'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
	}
	return config
})

/**
 * 自定义验证器，如果返回true 则进入响应拦截器的响应成功函数(resolve)，否则进入响应拦截器的响应错误函数(reject)
 * @param { Number } statusCode - 请求响应体statusCode（只读）
 * @return { Boolean } 如果为true,则 resolve, 否则 reject
 */
http.validateStatus = (statusCode) => {
	return statusCode === 200
}

// http.interceptor.request((config, cancel) => { /* 请求之前拦截器 */
//   config.header = {
//     ...config.header,
//     b: 1
//   }
//   /*
//   if (!token) { // 如果token不存在，调用cancel 会取消本次请求，但是该函数的catch() 仍会执行
//     cancel('token 不存在') // 接收一个参数，会传给catch((err) => {}) err.errMsg === 'token 不存在'
//   }
//   */
//   return config
// })

/**
 * 提示函数
 * 禁止点击蒙层、显示一秒后关闭
 */
const tip = msg => {
	uni.showToast({
		icon: 'none',
		title: msg,
		position: 'center',
		duration: 2000
	})
}
const modal = msg => {
	console.log(msg)
	let routes = getCurrentPages()
	if (routes[routes.length - 1].route == 'pages/login/login') {
		// store.dispatch('removeToken');
		return
	}
	uni.showToast({
		icon: 'none',
		title: msg,
		position: 'center',
		duration: 2000
	})
	store.dispatch('removeToken')
	uni.setStorageSync('overwindow', 0)
	setTimeout(() => {
		uni.navigateTo({
			url: '/pages/login/login'
		})
	}, 300)
}

/**
 * 请求失败后的错误统一处理
 * @param {Number} status 请求失败的状态码
 */
const errorHandle = (status, other) => {
	switch (status) {
		case 1000:
			tip(other)
			break
		case 1001:
			tip(vue.$i18n.t('request.date'))
			break
		case 1002:
			tip(vue.$i18n.t('request.verification'))
			break
		case 1003:
			tip(vue.$i18n.t('request.nodata'))
			break
		case 3:
			modal(other)
			break
		case 1005:
			tip(other);
			break;
		default:
			tip(other)
			break
	}
}

// http.interceptor.response((response) => { /* 请求之后拦截器 */
//   if (response.data.code !== 200) { // 服务端返回的状态码不等于200，则reject()
//     return Promise.reject(response)
//   }
//   return response
// }, (response) => { // 请求错误做点什么
//   return response
// })

http.interceptor.response((response) => {
	/* 请求之后拦截器 */
	const res = response.data
	console.log("结果：", JSON.stringify(res))
	if (parseInt(res.code) === 1) {
		return Promise.resolve(res.data)
	} else {
		// 没有错误信息则不弹窗	
		if (res.msg) {
			errorHandle(parseInt(res.code), res.msg)
		}
		if (!res.flag) {
			console.log(res);
		}
		return Promise.reject(res)
	}
}, (error) => { // 请求错误做点什么
	const {
		response
	} = error
	console.log('error', error)
	if (response) {
		return Promise.reject(res)
	} else {
		return Promise.reject(new Error('error'))
	}
})

export {
	http
}